Építsünk IP telefont
Kódolók
Készítette:
Moldován István, moldovan@tmit.bme.hu
<!DOCTYPE HTML PUBLIC "+//ISBN
82-7640-037::WWW//DTD HTML//EN//2.0" "HTML.DTD" >
1.
Feladat:
A feladat során
megvizsgáljuk a VoIP kódolók megvalósítását illetve használatát.
Első körben
implementáljuk a G.711 u- vagy a-law kódolót, majd kipróbáljuk néhány „gyári”
kódoló használatát is.
2.
Segédlet
Indítsuk el a
Linux live – IP telefon disztribúciót. Ez már tartalmazza az alsa-lib
könyvtárat is. Vegyük elő az előző órán elkészült ALSA
mintaprogramot (minta program található a http://bodri.tmit.bme.hu/ip_telefon/docs/Lab/Codec/pcm.alap.c
címen.
Teszteljük a
program helyes működését, és ha szükséges állítsunk a grafikus mixeren
(válasszuk ki a front mikrofont beviteli eszköznek, kapcsoljuk be a CAPTURE
forrást és húzzuk fel az erősítést).
Szükség esetén a
működés ellenőrizhető arecord és aplay parancsok segítségével.
Az első feladat
a program módosítása úgy, hogy lejátszás előtt kódolja
el majd dekódolja a mintavételezett hangot.
A G.711 (ITU-T, PCM: Pulse code modulation) egy nemzetközileg elismert standard és általánosan használt az analóg hang átalakítására és digitális hálózatokban való küldésére. A G.711 minősége és karakterisztikái gyakran referenciául szolgálnak új vagy javított kódolási algoritmusok összehasonlításakor a jelenlegi standardokkal. A jelenlegi PCM implementációk 64kbps átvitellel 4 KHz-es audio jelet eredményeznek. Két almodell létezik európai, illetve amerikai használatra, mégpedig a mu-law és a-law. Mindkettő egy megközelítőleg logaritmikus skálát alkalmaz a 16 bites minták 8 biten való tárolására. Így a hang dinamikáját jobban vissza tudja adni.
1
Ábra Az u-law kódolás
Definíció szerint
a u-law kódolást a következő képlettel lehet
elérni. Tipikusan 12..16 bites mintákat kódolunk,
melyek csúcsértéke mp=2048 vagy 32768.
A u-LAW (ejtsd
mu-LAW):
Ahol az m az aktuális minta értéke, u pedig 100 vagy 255. Egy más formája a fenti képletnek a:
ahol
x = normalizált bemenet (-1 és 1 közti
értékek)
255 = kompressziós paraméter
sgn(x) = sign
(+/-) x előjele
Az így elért
konverzió látható az alábbi ábrán.
2
Ábra A u-law kódoló karakterisztikája
Az a-law definíciója:
Ahol A=87.6, mp a minta csúcsértéke, m pedig az aktuális minta
értéke. A képlet itt is egyszerűsödik ha m/mp
értékét x normalizált egységgel helyettesítjük.
Az u-LAW -ból
A-LAW –ba való konverzió veszteséges, mivel újabb kvantálási hibákat viszünk a
rendszerbe. A u-law rendszert Észak-Amerikában és Japánban használják, míg az
A-law van használatban Európában és nemzetközi
viszonylatban.
A G.711 kódoló
0.125 ms algoritmikus késleltetést hoz be Packet Loss Concealment (PLC)
csomagvesztésjavító algoritmus nélkül és 3.75 ms PLC algoritmussal. A kódoló
gyakorlatilag bármilyen mintavételezési frekvenciával képes működni, de a
szabvány 8 kHz-et mond. Számítási komplexitása minimális.
Az
implementálását legyeszerűbben (és leghatékonyabban) egy előre
kiszámított táblázat segítségével valósíthatjuk meg…
·
Más kódoló használata
A nyílt forráskód
a honlapról letölthető. Integrációja egyszerű: az include könyvtárban levő gsm.h
az interfész a könyvtárhoz. Inicializáláskor létre kell hozni a kódoló és
dekódoló állapot tárhelyeit (gsm_create függvénnyel, külön a kódolónak, külön a
dekódolónak). Ezután gsm_encode/ gsm_decode függvényekkel lehet kódolni/dekódolni a
hangot.
G.729, AMR-NB és
AMR-WB kódolók:
http://www.voiceage.com/freecodecs.php
Használatuk
megegyezik (vagy nagyon hasonlít) a GSM használatához, azonban a forrás híján a
lib fájlt kell linkelni fordításkor.
3.
Tesztelés
Vizsgáljuk meg a hangminőség változását a különböző kódolók használata esetén!
4.
Irodalom
http://www.voiceage.com/freecodecs.php